package com.wx.tgp.jfinal.demo.config;

import com.jfinal.config.*;
import com.jfinal.core.Controller;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;
import com.wx.tgp.jfinal.demo.controller.IndexController;
import com.wx.tgp.jfinal.demo.controller.UserController;
import com.wx.tgp.jfinal.demo.entity.User;

/**
 * Created by Administrator on 2016/5/6.
 */
public class AppConfig extends JFinalConfig {

    /**
     * 加载view层的配置
     * 例如：配置页面的文字编码
     *       页面的类型：如：html，jsp
     * @param constants
     */
    public void configConstant(Constants constants){
        constants.setEncoding("UTF-8");
        constants.setDevMode(true);
        constants.setViewType(ViewType.JSP);
    }

    /**
     * 配置页面输入 / 时默认访问到IndexController这个类
     * 页面输入 /user 时默认访问到UserController这个类中
     * 页面输入 /user/login 时默认访问到UserController类中的login()方法，
     *          只需要在login()方法上面写上相应的配置即可
     * @param routes
     */
    public void configRoute(Routes routes){
        routes.add("/", IndexController.class);
        routes.add("/user", UserController.class);
    }

    public void configPlugin(Plugins plugins){
        // 利用PropKit工具类，加载jdbc.properties数据库信息
        PropKit.use("jdbc.properties");
        // 获取到jdbc.properties文件的数据库连接信息
        final String URL = PropKit.get("jdbcurl");
        final String userName = PropKit.get("user");
        final String password = PropKit.get("password");
        final Integer initialSize = PropKit.getInt("initialSize");
        final Integer minIdle = PropKit.getInt("minIdle");
        final Integer maxActivee = PropKit.getInt("maxActivee");

        // 连接数据库
        DruidPlugin druidPlugin = new DruidPlugin(URL,userName,password);
        // 设置数据库的最大连接数
        druidPlugin.set(initialSize,minIdle,maxActivee);
        druidPlugin.setFilters("stat,wall");
        plugins.add(druidPlugin);

        // 因为service层用到了ActiveRecord插件，需要在AppConfig进行注册使用
        //添加Model类和数据库表的映射。user指的是表名，userid指的是主键
        ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);
        activeRecordPlugin.addMapping("user","userId",User.class);
        plugins.add(activeRecordPlugin);
    }

    /**
     * 这个方法是配置全局的拦截器，拦截所有的请求
     * @param interceptors
     */
    public  void configInterceptor(Interceptors interceptors){
        //这里用于配置全局的拦截器，对所有请求进行拦截
        // 添加控制层全局拦截器
        //interceptors.addGlobalActionInterceptor(new GlobalActionInterceptor());
        // 添加业务层全局拦截器
        //interceptors.addGlobalServiceInterceptor(new GlobalServiceInterceptor());
    }

    public void configHandler(Handlers handlers){

    }
}
